home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / CIncludes / Serial.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-11  |  8.0 KB  |  232 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Serial.h
  3.  
  4.      Contains:    Asynchronous Serial Driver (.AIn/.AOut/.BIn/.BOut) Interfaces
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.1.4
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. */
  19.  
  20. #ifndef __SERIAL__
  21. #define __SERIAL__
  22.  
  23.  
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. /*    #include <ConditionalMacros.h>                                */
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #if PRAGMA_ALIGN_SUPPORTED
  34. #pragma options align=mac68k
  35. #endif
  36.  
  37. #if PRAGMA_IMPORT_SUPPORTED
  38. #pragma import on
  39. #endif
  40.  
  41.  
  42. enum {
  43.     baud150                        = 763,
  44.     baud300                        = 380,
  45.     baud600                        = 189,
  46.     baud1200                    = 94,
  47.     baud1800                    = 62,
  48.     baud2400                    = 46,
  49.     baud3600                    = 30,
  50.     baud4800                    = 22,
  51.     baud7200                    = 14,
  52.     baud9600                    = 10,
  53.     baud14400                    = 6,
  54.     baud19200                    = 4,
  55.     baud28800                    = 2,
  56.     baud38400                    = 1,
  57.     baud57600                    = 0,
  58.     stop10                        = 16384,
  59.     stop15                        = -32768L,
  60.     stop20                        = -16384,
  61.     noParity                    = 0,
  62.     oddParity                    = 4096,
  63.     evenParity                    = 12288,
  64.     data5                        = 0,
  65.     data6                        = 2048,
  66.     data7                        = 1024,
  67.     data8                        = 3072
  68. };
  69.  
  70. enum {
  71.     aData                        = 6,                            /* channel A data in or out (historical) */
  72.     aCtl                        = 2,                            /* channel A control (historical) */
  73.     bData                        = 4,                            /* channel B data in or out (historical) */
  74.     bCtl                        = 0,                            /* channel B control (historical) */
  75.     ctsEvent                    = 32,                            /* flag for SerShk.errs and SerShk.evts */
  76.     breakEvent                    = 128,                            /* flag for SerShk.errs and SerShk.evts */
  77.     xOffWasSent                    = 128,                            /* flag for SerStaRec.xOffSent */
  78.     dtrNegated                    = 64,                            /* flag for SerStaRec.xOffSent */
  79.     ainRefNum                    = -6,                            /* serial port A input */
  80.     aoutRefNum                    = -7,                            /* serial port A output */
  81.     binRefNum                    = -8,                            /* serial port B input */
  82.     boutRefNum                    = -9,                            /* serial port B output */
  83.     swOverrunErr                = 1,                            /* serial driver error masks */
  84.     breakErr                    = 8,                            /* serial driver error masks */
  85.     parityErr                    = 16,                            /* serial driver error masks */
  86.     hwOverrunErr                = 32,                            /* serial driver error masks */
  87.     framingErr                    = 64,                            /* serial driver error masks */
  88.     kOptionClockX1CTS            = 64,                            /* option bit used with Control code 16 */
  89.     kOptionPreserveDTR            = 128                            /* option bit used with Control code 16 */
  90. };
  91.  
  92. enum {
  93.     sPortA                        = 0,
  94.     sPortB                        = 1
  95. };
  96.  
  97. typedef SInt8 SPortSel;
  98.  
  99. /* csCodes for serial driver Control routines */
  100.  
  101. enum {
  102.     kSERDConfiguration            = 8,                            /* program port speed, bits/char, parity, and stop bits */
  103.     kSERDInputBuffer            = 9,                            /* set buffer for chars received with no read pending */
  104.     kSERDSerHShake                = 10,                            /* equivalent to SerHShake, largely obsolete */
  105.     kSERDClearBreak                = 11,                            /* assert break signal on output */
  106.     kSERDSetBreak                = 12,                            /* negate break state on output */
  107.     kSERDBaudRate                = 13,                            /* set explicit baud rate, other settings unchanged */
  108.     kSERDHandshake                = 14,                            /* superset of 10, honors setting of fDTR */
  109.     kSERDClockMIDI                = 15,                            /* clock externally on CTS with specified multiplier */
  110.     kSERDMiscOptions            = 16,                            /* select clock source and DTR behavior on close */
  111.     kSERDAssertDTR                = 17,                            /* assert DTR output */
  112.     kSERDNegateDTR                = 18,                            /* negate DTR output */
  113.     kSERDSetPEChar                = 19,                            /* select char to replace chars with invalid parity */
  114.     kSERDSetPEAltChar            = 20,                            /* select char to replace char that replaces chars with invalid parity */
  115.     kSERDSetXOffFlag            = 21,                            /* set XOff output flow control (same as receiving XOff) */
  116.     kSERDClearXOffFlag            = 22,                            /* clear XOff output flow control (same as receiving XOn) */
  117.     kSERDSendXOn                = 23,                            /* send XOn if input flow control state is XOff */
  118.     kSERDSendXOnOut                = 24,                            /* send XOn regardless of input flow control state */
  119.     kSERDSendXOff                = 25,                            /* send XOff if input flow control state is XOn */
  120.     kSERDSendXOffOut            = 26,                            /* send XOff regardless of input flow control state */
  121.     kSERDResetChannel            = 27,                            /* reset serial I/O channel hardware */
  122.     kSERD115KBaud                = 115,                            /* set 115.2K baud data rate (some driver versions) */
  123.     kSERD230KBaud                = 230                            /* set 230.4K baud data rate (some driver versions) */
  124. };
  125.  
  126. /* csCodes for serial driver Status routines */
  127.  
  128. enum {
  129.     kSERDInputCount                = 2,                            /* return characters available (SerGetBuf) */
  130.     kSERDStatus                    = 8,                            /* return characters available (SerStatus) */
  131.     kSERDVersion                = 9                                /* return version number in first byte of csParam */
  132. };
  133.  
  134. struct SerShk {
  135.     Byte                             fXOn;                        /* XOn flow control enabled flag */
  136.     Byte                             fCTS;                        /* CTS flow control enabled flag */
  137.     unsigned char                     xOn;                        /* XOn character */
  138.     unsigned char                     xOff;                        /* XOff character */
  139.     Byte                             errs;                        /* errors mask bits */
  140.     Byte                             evts;                        /* event enable mask bits */
  141.     Byte                             fInX;                        /* Input flow control enabled flag */
  142.     Byte                             fDTR;                        /* DTR input flow control flag */
  143. };
  144. typedef struct SerShk SerShk;
  145.  
  146. struct SerStaRec {
  147.     Byte                             cumErrs;                    /* errors accumulated since last SerStatus() call */
  148.     Byte                             xOffSent;                    /* input (requested to be) held off by xOffWasSent or dtrNegated */
  149.     Byte                             rdPend;                        /* incomplete read pending in I/O queue */
  150.     Byte                             wrPend;                        /* incomplete write pending in I/O queue */
  151.     Byte                             ctsHold;                    /* transmit disabled by hardware handshaking */
  152.     Byte                             xOffHold;                    /* transmit disabled by XOn/XOff handshaking */
  153. };
  154. typedef struct SerStaRec SerStaRec;
  155.  
  156. #if OLDROUTINENAMES
  157.  
  158. /* ********************************************************************************************* */
  159. /* The following constant names have been retired in favor of standard, more descriptive names.  */
  160. /* You can still compile old code by defining OLDROUTINENAMES. There were several constants that */
  161. /* were formerly available that have been removed, as they are now regarded as either private or */
  162. /* unsupported. We advise that you stop using any constants that are not defined in this file.   */
  163. /* ********************************************************************************************* */
  164.  
  165. enum {
  166.     serdOptionClockExternal        = kOptionClockX1CTS,        /* option bit used with Control code 16 */
  167.     serdOptionPreserveDTR        = kOptionPreserveDTR        /* option bit used with Control code 16 */
  168. };
  169.  
  170. /* csCodes for serial driver Control routines */
  171. enum {
  172.     serdReset                    = kSERDConfiguration,
  173.     serdSetBuf                    = kSERDInputBuffer,
  174.     serdHShake                    = kSERDSerHShake,
  175.     serdClrBrk                    = kSERDClearBreak,
  176.     serdSetBrk                    = kSERDSetBreak,
  177.     serdSetBaud                    = kSERDBaudRate,
  178.     serdHShakeDTR                = kSERDHandshake,
  179.     serdSetMIDI                    = kSERDClockMIDI,
  180.     serdSetMisc                    = kSERDMiscOptions,
  181.     serdSetDTR                    = kSERDAssertDTR,
  182.     serdClrDTR                    = kSERDNegateDTR,
  183.     
  184.     serdSetPEChar                = kSERDSetPEChar,
  185.     serdSetPECharAlternate        = kSERDSetPEAltChar,
  186.     
  187.     serdSetXOff                    = kSERDSetXOffFlag,
  188.     serdClrXOff                    = kSERDClearXOffFlag,
  189.     serdSendXOnConditional        = kSERDSendXOn,
  190.     serdSendXOn                    = kSERDSendXOnOut,
  191.     serdSendXOffConditional        = kSERDSendXOff,
  192.     serdSendXOff                = kSERDSendXOffOut,
  193.     
  194.     serdChannelReset            = kSERDResetChannel,
  195.     
  196.     serdSet230KBaud                = kSERD230KBaud,        /* set 230K baud data rate */
  197. };
  198.  
  199.  
  200. /* csCodes for serial driver Status routines */
  201. enum {
  202.     serdGetBuf                    = kSERDInputCount,
  203.     serdStatus                    = kSERDStatus,
  204.     serdGetVers                    = kSERDVersion,
  205. };
  206.  
  207. #endif    /* OLDROUTINENAMES */
  208.  
  209.  
  210. extern pascal OSErr SerReset(short refNum, short serConfig);
  211. extern pascal OSErr SerSetBuf(short refNum, Ptr serBPtr, short serBLen);
  212. extern pascal OSErr SerHShake(short refNum, const SerShk *flags);
  213. extern pascal OSErr SerSetBrk(short refNum);
  214. extern pascal OSErr SerClrBrk(short refNum);
  215. extern pascal OSErr SerGetBuf(short refNum, long *count);
  216. extern pascal OSErr SerStatus(short refNum, SerStaRec *serSta);
  217.  
  218.  
  219. #if PRAGMA_IMPORT_SUPPORTED
  220. #pragma import off
  221. #endif
  222.  
  223. #if PRAGMA_ALIGN_SUPPORTED
  224. #pragma options align=reset
  225. #endif
  226.  
  227. #ifdef __cplusplus
  228. }
  229. #endif
  230.  
  231. #endif /* __SERIAL__ */
  232.